package com.hxzy.apsect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * @author wzm
 * @create 2024-03-12 14:36
 * project_name:JavaWeb2401
 * @Description
 */
//@Component
//@Aspect
//@Order(2)
public class Aspect01 {
    //演示切入点表达式
   // execution(访问修饰符?  返回值  包名.类名.?方法名(方法参数) throws 异常?)

    //完整写法public void delete(Integer id) throws Exception {}

    //@Pointcut("execution(public void com.hxzy.service.impl.DeptServiceImpl.delete(java.lang.Integer) throws Exception)")

    //省略方法的访问修饰符 异常
//    @Pointcut("execution(void com.hxzy.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //*代替返回值类型 任意类型
//    @Pointcut("execution(* com.hxzy.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //使用*代替返回值类型与包名 一个包一个*
//    @Pointcut("execution(* com.hxzy.*.*.DeptServiceImpl.delete(java.lang.Integer))")


    //使用..省略多级包
    //@Pointcut("execution(* com..service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //使用*代替类名
//    @Pointcut("execution(* com..*.delete(java.lang.Integer))")

    //使用*代替方法名
//    @Pointcut("execution(* com..*.*(java.lang.Integer))")

    //使用*代替一个参数
//    @Pointcut("execution(* com.hxzy.service.impl.DeptServiceImpl.delete(*))")

    //使用*||。。代替包 使用..代替任何参数
    //@Pointcut("execution(* com..*.*(..))")
//    @Pointcut("execution(* com..service.EmpServiceImpl.*(..))")

    //根据业务需要可以式哟共 && || !来组合复杂的切入点
    //举例：对deptService类中的list方法与delete方法进行增强但是无论有多少个参数都可以
   // @Pointcut("execution(* com.hxzy.service.DeptService.list(..)) || execution(* com.hxzy.service.impl.EmpServiceImpl.deleteByIds(..))")

    //匹配所有DeptServiceImpl中find开头的方法
    //@Pointcut("execution(* com.hxzy.service.impl.DeptServiceImpl.find*(..))")

    //基于接口来描述
    @Pointcut("execution(* com.hxzy.service.DeptService.*(..))")
    public void pt1(){}




    //引用某个切面类中定义切入点表达式 TimeAspect类中的切入点表达式
    //使用全类名
    @Before("com.hxzy.apsect.TimeAspect.pt()")
    public void before(){
        System.out.println("before000001");
    }


    @After("com.hxzy.apsect.TimeAspect.pt()")
    public void after(){
        System.out.println("after000001");
    }
}

